//
// Created by xunanmu on 2021/2/16.
//

#ifndef HJSON_HJSON_H
#define HJSON_HJSON_H

typedef enum {
    HJSON_NULL,
    HJSON_TRUE,
    HJSON_FALSE,
    HJSON_NUMBER,
    HJSON_STRING,
    HJSON_ARRAY,
    HJSON_OBJECT,
}HjsonType;

typedef struct {
    double number;
    HjsonType type;
}HjsonValue;

enum {
    HJSON_PARSE_OK = 0,
    HJSON_PARSE_EXPECT_VALUE,
    HJSON_PARSE_INVALID_VALUE,
    HJSON_PARSE_ROOT_NOT_SINGULAR,
    HJSON_PARSE_NUMBER_TOO_BIG
};

int hjson_parse(HjsonValue *value, const char *json);

HjsonType hjson_get_type(const HjsonValue *value);

double hjson_get_number(const HjsonValue *value);


#endif //HJSON_HJSON_H
